package com.zsrt.javaweb;

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;

import com.zsrt.javaweb.bbu.department.entity.DepartmentEntity;

public class NamedParameterJdbcTemplateTest {
	
	
	private ApplicationContext  ac=null;
	private NamedParameterJdbcTemplate namedParameterJdbcTemplate=null;
	
	
	
	{
		ac= new ClassPathXmlApplicationContext("applicationContext.xml");
		namedParameterJdbcTemplate= (NamedParameterJdbcTemplate) ac.getBean("namedParameterJdbcTemplate");
	}
	
	
	/**
	 * 具名参数 可以为参数起名字 比问号更便于维护
	 * @throws Exception
	 */
	@Test
	public void namedParameterJdbcTemplateTest01() throws Exception {
		String sql="insert into bbu_department_t(id,department_name) values(:id,:departmentName)";
		Map<String,Object> paramMap = new HashMap<>();
		paramMap.put("id", 50);
		paramMap.put("departmentName", "AA");
		
		namedParameterJdbcTemplate.update(sql, paramMap);
		
	}
	
	/**
	 * 使用具名参数时，可以使用update(String sql, SqlParameterSource paramSource) 方法进行更新操作
	 * 优点1：sql语句中的参数名称和类的属性名称一致
	 * 优点2：实现类BeanPropertySqlParameterSource可以直接使用对象dep作为参数。
	 * @throws Exception
	 */
	@Test
	public void namedParameterJdbcTemplateTest02() throws Exception {
		String sql="insert into bbu_department_t(id,department_name) values(:id,:departmentName)";
		DepartmentEntity dep = new DepartmentEntity();
		dep.setId(71);
		dep.setDepartmentName("CC");
		SqlParameterSource sqlParameterSource = new BeanPropertySqlParameterSource(dep);
		namedParameterJdbcTemplate.update(sql, sqlParameterSource);
		
	}
	
	

}
